<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="root">

    </div>
</body>
<script src="../react@17.js"></script>
<script src="../react-dom@17.js"></script>
<script src="../babel.js"></script>
<script type="text/babel">
    // 描绘组件从创建到销毁的过程，我们称这个过程就是组件的生命周期。
    /* 
    组件的生命周期分为三个阶段：
    初始化阶段：
    1. constructor 实例初始化立即调用 定义状态 、绑定this、定义creatRef
    2. componentWillMount 组件渲染前 
    3. render 渲染页面 数据渲染业务逻辑处理，生成新的虚拟dom树并通过diff算法将虚拟dom转化为真实dom 切记不可以调用this.setState
    4. componentDidMount 组件渲染后 发送http请求、更新状态、dom操作
    更新阶段：
    1. render 渲染页面 数据渲染业务逻辑处理，生成新的虚拟dom树并通过diff算法将虚拟dom转化为真实dom 切记不可以调用this.setState
    2. componentDidUpdate 组件更新后 不能调用setState dom操作
    销毁阶段:
    componentWillUnmount:组件卸载时触发 内存释放 清楚计时器...
    */
    class App extends React.Component{
        constructor(props){
            super(props)
            console.log("初始化立即调用")
            this.state = {
                bannner:[],
                num:0
            }
        }
        // componentWillMount(){
        //     console.log("组件渲染前")
        // }
        render(){
            console.log("渲染啦")
            return (
                <div>
                    {
                        this.state.bannner.map((item,index)=>{
                            return <img src={item.pic} alt=""  key={index}/>
                        })
                    }
                    <h1>{this.state.num}</h1>
                    <button onClick={()=>{
                        this.setState((state)=>{
                            return {
                                num:state.num+1
                            }
                        })
                    }}>点我</button>
                    {this.state.num!==5 && <Child/>}
                </div>
            )
        }
        componentDidMount(){
            console.log("组件渲染后")
            let xhr = new XMLHttpRequest();
            xhr.open("get",'https://apif.java.crmeb.net/api/front/index');
            xhr.send();
            xhr.onreadystatechange = ()=>{
                if(xhr.readyState===4){
                    console.log(JSON.parse(xhr.response))
                 
                }
            }
        }
        // 组件更新后
        componentDidUpdate(){
            console.log("组件更新啦")
        }
        componentWillUnmount(){
            console.log("组件卸载啦")
        }
    }
    class Child extends React.Component{
        render(){
            return (
                <div>子组件</div>
            )
        }
        componentDidMount(){
         this.timer =  setInterval(() => {
                console.log(1)
            }, 1000);
            window.onresize= ()=>{
                console.log("213123423")
            }
            document.addEventListener("scroll",()=>{
                console.log("滚动啦")
            })
        }
        componentWillUnmount(){
            console.log("组件卸载了")
            clearInterval(this.timer)
            window.onresize = null;
            document.removeEventListener("scroll")
        }
    }
    ReactDOM.render(<App/>,document.getElementById("root"))
</script>
</html>